package _17_InnerClass;

/**
 * 匿名内部类 : 指在调用方法的时候,需要传入一个接口的实现类对象,这个时候 可以不传递类对象,传递一个匿名内部类
 * 
 * 语法 : 方法(new 接口名(){ 类体 });
 * 
 * 传入匿名内部类的时候,会自动创建一个对象传入,因为没有名字,我们不能自己创建
 * 
 * 类名为 外部类类名 $1 以此类推
 * 
 * 不能有静态声明,但是可以声明常量(public static final int i = 10)
 * 
 * 静态变量/静态方法 都不行
 * 
 * 不能直接访问外部类的成员属性,需要使用对象调用
 * 
 * @author lenovo
 * @Date 2020年7月11日
 * @Time 下午8:42:54
 */
public class OuterClass_04 {
	private static String s1 = "静态变量";
	private String s2 = "成员变量";

	public static void main(String[] args) {
//		IUserService userService = new UserService();
//		m1(userService);

		m1(1, new IUserService() {
			public static final int i = 2;

			public void m1() {

			}

			@Override
			public void login() {
				System.out.println("啥也不是");
				System.out.println(this);
				System.out.println(s1);
				// 需要使用对象调用,不能直接调用外部类的成员属性
//				System.out.println(s2);
			}

		});
	}

	public static void m1(int i, IUserService userService) {
		userService.login();
	}
}

interface IUserService {
	public void login();
}

//class UserService  implements IUserService{
//	@Override
//	public void login() {
//		
//	}
//}